import axios from 'axios'
import { ElMessageBox, ElMessage } from 'element-plus' //在js文件中，需单独引入提示

const server = axios.create({
    baseURL: 'https://lianghj.top:8888/api/private/v1',
    timeout: 20000
})
//请求拦截
server.interceptors.request.use(config => {
    //给请求头统一加token，不用每次进后台，每个页面都加了
    let token = localStorage.getItem('store')
    console.log(token, 'null');
    if (token) {
        config.headers.Authorization = token
    }
    return config
}, error => {
    Promise.reject(error)
})
//响应拦截
server.interceptors.response.use(res => {
    //如何处理token过期问题？1.需要后台响应值告诉你，一般后台会自定义一个状态码40001,或者返回无效token,token过期等 2.提醒用户登录过期,返回登录页面
    //  console.log('响应成功数据',res);
    let code = res.data.meta.status //响应状态码
    let msg = res.data.meta.msg;    //提示信息

    // 消息提示
    if (code == 200 || code == 201) {
        if (msg != "") {
            ElMessage.success(msg)
        } else {
            ElMessage.error(msg)
        }
    }

    if (msg == "无效token") {
        ElMessageBox.confirm('token过期, 是否跳转到登录页面?', '提示', {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
        }).then(() => {
            //原生js方法跳转
            location.href = '/login'
        }).catch(() => {
        })
    }

    //对错误状态码进行精细控制
    if (code === 400 || code === 401 || code === 403 || code === 404 || code === 500) {
        ElMessage.error({
            duration: 1000,
            message: msg
        })
    }

    return res.data

}, error => {
    //接口请求，响应错误-一般都是网络问题，进行处理
    console.log('响应错误', error);
    let { message } = error;
    if (message == "Network Error") {
        message = "后端接口连接异常";
    }
    else if (message.includes("timeout")) {
        message = "系统接口请求超时";
    }

    Message({
        message: message,
        type: 'error',
        duration: 1000
    })

    Promise.reject(error)
})
export default server